%% 修复后的测试脚本
clear all; close all; clc;

% 添加FieldTrip路径 (按需修改)
ftPath = 'C:\Users\custs\workspace\matlab\congcong\lib\fieldtrip-master';
addpath(ftPath);
ft_defaults;

%% 创建模拟时频数据 (修复大小问题)
fprintf('创建模拟数据...\n');
freq = struct();
freq.label = {'Fz', 'Cz', 'Pz'};
freq.freq = 1:0.5:30;  % 频率向量 (1×60)
freq.time = -0.5:0.01:1.0;  % 时间向量 (1×151)
freq.dimord = 'chan_freq_time';

% 创建网格矩阵 - 修复大小问题
[F_mat, T_mat] = meshgrid(freq.freq, freq.time);  % 151×60 矩阵

% 创建正弦波模式的数据
for ch = 1:length(freq.label)
    % 使用网格矩阵计算模式
    pattern = sin(2*pi*0.2*F_mat) .* cos(2*pi*0.1*T_mat) .* exp(-T_mat.^2/(0.5)^2);
    
    % 调整大小以匹配 dimord (频率×时间)
    pattern = pattern';  % 转置为 60×151 (频率×时间)
    
    % 存储到数据结构
    freq.powspctrm(ch, :, :) = pattern * (1 + ch*0.2); % 增加通道差异
end

% 复制作为不同条件
freqA = freq;
freqA.powspctrm = freq.powspctrm * 1.2; % 增强条件A

freqB = freq;
freqB.powspctrm = freq.powspctrm * 0.8; % 减弱条件B

%% 测试1：基本subplot布局
fprintf('\n=== 测试1：基本subplot布局 ===\n');
figure('Name', '基本subplot布局测试', 'Position', [100, 100, 900, 700]);

% 创建4个子图
for i = 1:4
    subplot(2, 2, i);
    
    % 不同类型的数据显示
    if i == 1
        plot(randn(50,1));
        title('随机数据线图');
        xlabel('样本点');
    elseif i == 2
        imagesc(rand(20,20));
        colorbar;
        title('随机矩阵热图');
    elseif i == 3
        contourf(peaks(30), 20);
        colorbar;
        title('等高线图');
    else
        bar([1.5, 2.3, 0.9, 3.0]);
        title('柱状图');
    end
end

fprintf('检查：4个不同的子图是否在2x2网格中正确显示？\n');
pause(2);

%% 测试2：ft_singleplotTFR在subplot中的布局
fprintf('\n=== 测试2：ft_singleplotTFR在subplot中的布局 ===\n');
fig = figure('Name', 'ft_singleplotTFR布局测试', 'Position', [100, 100, 900, 700]);

% 配置绘图参数
cfg = struct();
cfg.parameter = 'powspctrm';
cfg.colorbar = 'yes';
cfg.title = '';

% 子图1：条件A (Fz通道)
cfg.figure = subplot(2, 2, 1);
cfg.channel = 'Fz';
ft_singleplotTFR(cfg, freqA);
title('条件A - Fz');

% 子图2：条件B (Fz通道)
cfg.figure = subplot(2, 2, 2);
cfg.channel = 'Fz';
ft_singleplotTFR(cfg, freqB);
title('条件B - Fz');

% 子图3：差异图 (Cz通道)
cfg.figure = subplot(2, 2, 3);
cfg.channel = 'Cz';
diffData = freqA;
diffData.powspctrm = freqA.powspctrm - freqB.powspctrm;
ft_singleplotTFR(cfg, diffData);
title('差异(A-B) - Cz');

% 子图4：不同通道比较
cfg.figure = subplot(2, 2, 4);
hold on;

% 提取时间平均功率 (300-500ms)
timeIdx = find(freqA.time >= 0.3 & freqA.time <= 0.5);
meanPower = squeeze(mean(freqA.powspctrm(:, :, timeIdx), 3));

% 绘制不同通道的频谱
colors = {'r', 'g', 'b'};
for ch = 1:length(freqA.label)
    plot(freqA.freq, meanPower(ch, :), ...
        'Color', colors{ch}, 'LineWidth', 2);
end

title('平均功率 (300-500ms)');
xlabel('频率 (Hz)');
ylabel('功率');
legend(freqA.label);
grid on;

fprintf('检查：4个时频相关子图是否在2x2网格中正确显示？\n');
fprintf('特别注意：ft_singleplotTFR是否在指定子图位置绘制？\n');

%% 测试3：单个通道多条件分析 (模拟ROI分析)
fprintf('\n=== 测试3：单个通道多条件分析 ===\n');
chan = 'Pz';
fig3 = figure('Name', ['通道 ' chan ' 分析测试'], 'Position', [100, 100, 1000, 800]);

% 子图1：条件A
cfg.figure = subplot(2, 2, 1);
cfg.channel = chan;
ft_singleplotTFR(cfg, freqA);
title(['条件A - ' chan]);

% 子图2：条件B
cfg.figure = subplot(2, 2, 2);
ft_singleplotTFR(cfg, freqB);
title(['条件B - ' chan]);

% 子图3：差异图
cfg.figure = subplot(2, 2, 3);
ft_singleplotTFR(cfg, diffData);
title(['差异(A-B) - ' chan]);

% 子图4：统计比较
cfg.figure = subplot(2, 2, 4);

% 模拟被试数据
nSubj = 10;
dataA = 0.5 + randn(nSubj, 1)*0.1;
dataB = 0.3 + randn(nSubj, 1)*0.1;

% 绘制箱线图
boxplot([dataA, dataB], 'Labels', {'条件A', '条件B'});
ylabel('ITC值');
title(sprintf('%s: 模拟统计比较 (n=%d)', chan, nSubj));
hold on;
plot(mean([dataA, dataB]), 'dg', 'MarkerSize', 10, 'LineWidth', 2);

fprintf('检查：单个通道的4个分析是否在同一窗口显示？\n');
fprintf('特别注意：统计图是否出现在右下角子图？\n');

%% 测试结论
fprintf('\n=== 测试总结 ===\n');
fprintf('如果所有图形窗口均按预期布局显示：\n');
fprintf(' - subplot 和 ft_singleplotTFR 协同工作正常\n');
fprintf(' - 您的FieldTrip安装配置正确\n\n');
fprintf('如果遇到问题：\n');
fprintf('1. 检查FieldTrip路径是否正确\n');
fprintf('2. 确保没有在subplot之间意外创建新图形\n');
fprintf('3. 验证ft_singleplotTFR是否返回错误\n');